package sv.com.bolsaTrabajo.view.bean.managedbeans;

import java.io.IOException;
import sv.com.bolsaTrabajo.model.dao.AdmistradorFacade;
import sv.com.bolsaTrabajo.model.dao.EmpresaFacade;
import sv.com.bolsaTrabajo.model.dao.PersonaFacade;
import sv.com.bolsaTrabajo.model.dao.UsuarioFacade;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import sv.com.bolsaTrabajo.view.bean.ManejadorAccion;
import sv.com.bolsaTrabajo.model.entities.Admistrador;
import sv.com.bolsaTrabajo.model.entities.Persona;
import sv.com.bolsaTrabajo.model.entities.Empresa;
import sv.com.bolsaTrabajo.model.entities.Usuario;

@ManagedBean
@SessionScoped
public class UsuarioSesionMB extends ManejadorAccion {

    @EJB
    private UsuarioFacade usuarioFacade;
    @EJB
    private AdmistradorFacade admistradorFacade;
    @EJB
    private PersonaFacade personaFacade;
    @EJB
    private EmpresaFacade empresaFacade;

    private Usuario usuario;
    private Empresa empresa;
    private Persona persona;
    private Admistrador admin;
    private static final String urlPaginaAdm = "/vistas/pprincipalAdm.xhtml";
    private static final String urlPaginaCv = "/BOLSA_TRABAJO/pprincipalCv.xhtml";
    private static final String urlPaginaEmp = "/BOLSA_TRABAJO/pprincipalEmp.xhtml";

    private String nombreUsuario;

    public UsuarioSesionMB() {
        usuario = new Usuario();
    }

    /**
     * Metodo con el cual es ingresado la contraseña a traves de parametros
     * desde la vista
     *
     * @param contrasenia
	 *
     */
    public void llamarUsuario(String contrasenia) {
        loginUsuario(contrasenia);
    }

    public void loginUsuario(String contrasenia) {
        try {
            usuario = usuarioFacade.validarAcceso(nombreUsuario, contrasenia);
            if (usuario != null && usuario.getIdUsuario() > 0) {
                if (usuario.getIdRol().getIdRol() == 1) {
                    //admin = admistradorFacade.bAdminPorUsuario(usuario.getIdUsuario());
                    redireccionarPagian(urlPaginaAdm);
                } else if (usuario.getIdRol().getIdRol() == 2) {
                  //  persona = personaFacade.bPersona(usuario.getIdUsuario());
                    redireccionarPagian(urlPaginaCv);
                } else if (usuario.getIdRol().getIdRol() == 3) {
                    //empresa = empresaFacade.bEmpresaPorUsuario(usuario.getIdUsuario());
                    redireccionarPagian(urlPaginaEmp);
                }
            } else {
                mostrarMensajeError("No existe usuario o contraseña");
            }
        } catch (Exception e) {
            mostrarMensajeError("Ha ocurrido un error al ingresar");
        } finally {
            usuarioFacade = null;
        }
    }

    /**
     * Mostrar algun mensaje de error este metodo es unicamente para session
     * bean ya que no se puede heredar de un ManejadorAccion
     *
     * @param msg - es el mensaje que se quiere enviar a pantalla
     *
     */
    private void mostrarMensajeError(String msg) {
        RequestContext requestContext = RequestContext.getCurrentInstance();
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "", msg));
        if (requestContext != null) {
            requestContext.update("IDGrowlErrorSistemas");
        }
    }

    public void redireccionarPagian(String url) {
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect(url);
        } catch (IOException exception) {
            mostrarMensajeError("No es posible re-direccionar a la página " + url);
        }
    }

//    public String validar() {
//
//        usuario = usuarioFacade.vLogin(nombreUsuario, password);
//        String ruta = "";
//        if (usuario == null) {
//            ruta = "pagPrincipal";
//        } else if (usuario.getIdRol().getIdRol() == 1) {
//            admin = admistradorFacade.bAdminPorUsuario(usuario.getIdUsuario());
//            ruta = "vistas/pprincipalAdm";
//        } else if (usuario.getIdRol().getIdRol() == 2) {
//            persona = personaFacade.bPersona(usuario.getIdUsuario());
//            ruta = "vistas/pprincipalCv";
//
//        } else if (usuario.getIdRol().getIdRol() == 3) {
//            empresa = empresaFacade.bEmpresaPorUsuario(usuario.getIdUsuario());
//            ruta = "vistas/pprincipalEmp";
//        }
//        nick = "";
//        password = "";
//        return ruta;
//    }
    public String logOut() {
        usuario = null;
        persona = null;
        empresa = null;
        return "/vistas/pagPrincipal.xhtml?faces-redirect=true";
    }
//    public String baseUrl(){
////        return util.myUtil.baseUrl();
//        return "http://localhost:8080/miEmpleosv13/";
//    }    

    /**
     * ******************** Getter and Setters ***********************
     */
    public String getNombreUsuario() {
        return nombreUsuario;
    }

    public void setNombreUsuario(String nombreUsuario) {
        this.nombreUsuario = nombreUsuario;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Empresa getEmpresa() {
        return empresa;
    }

    public void setEmpresa(Empresa empresa) {
        this.empresa = empresa;
    }

    public Persona getPersona() {
        return persona;
    }

    public void setPersona(Persona persona) {
        this.persona = persona;
    }

    public Admistrador getAdmin() {
        return admin;
    }

    public void setAdmin(Admistrador admin) {
        this.admin = admin;
    }

}
